package cn.csc.module.distribute.service.order;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.module.distribute.api.order.dto.DistributeOrderDTO;
import cn.csc.module.distribute.controller.admin.order.vo.*;
import cn.csc.module.distribute.controller.app.order.vo.AppDistributeOrderAmountVO;
import cn.csc.module.distribute.controller.app.order.vo.AppDistributeOrderItemRespVO;
import cn.csc.module.distribute.controller.app.order.vo.AppDistributeOrderReqVO;
import cn.csc.module.distribute.controller.app.order.vo.AppDistributeOrderRespVO;
import cn.csc.module.distribute.dal.dataobject.order.DistributeOrderDO;

import javax.validation.Valid;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 分销订单记录 Service 接口
 *
 * @author liuchuang
 */
public interface DistributeOrderService {

    /**
     * 创建分销订单记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    BigInteger createOrder(@Valid DistributeOrderCreateReqVO createReqVO);

    /**
     * 更新分销订单记录
     *
     * @param updateReqVO 更新信息
     */
    void updateOrder(@Valid DistributeOrderUpdateReqVO updateReqVO);

    /**
     * 删除分销订单记录
     *
     * @param id 编号
     */
    void deleteOrder(BigInteger id);

    /**
     * 获得分销订单记录
     *
     * @param id 编号
     * @return 分销订单记录
     */
    DistributeOrderDO getOrder(BigInteger id);

    /**
     * 获得分销订单记录列表
     *
     * @param ids 编号
     * @return 分销订单记录列表
     */
    List<DistributeOrderDO> getOrderList(Collection<BigInteger> ids);

    /**
     * 获得分销订单记录分页
     *
     * @param pageReqVO 分页查询
     * @return 分销订单记录分页
     */
    PageResult<DistributeOrderDO> getOrderPage(DistributeOrderPageReqVO pageReqVO);

    /**
     * 获得分销订单记录列表, 用于 Excel 导出
     *
     * @param pageReqVO 查询条件
     * @return 分销订单记录列表
     */
    List<DistributeOrderExcelVO> getOrderExportList(DistributeOrderPageReqVO pageReqVO);

    /**
     * app接口，获取我的团队订单分页
     * @param pageReqVO
     * @return
     */
    PageResult<AppDistributeOrderRespVO> selectAppOrderPage(AppDistributeOrderReqVO pageReqVO);
    /**
     * admin接口，获取分销订单分页列表
     * @param pageReqVO
     * @return
     */
    PageResult<AppDistributeOrderRespVO> selectAdminOrderPage(DistributeOrderPageReqVO pageReqVO);
    /**
     * 根据orderId 查询订单列表
     * @param orderIds
     * @return
     */
    Map<BigInteger,List<AppDistributeOrderItemRespVO>> selectListByOrderId(List<BigInteger> orderIds);

    /**
     * 根据orderIds 查询订单的总金额，总佣金列表
     * @param orderIds
     * @return
     */
   List<AppDistributeOrderRespVO> selectAmountListByOrderId(Integer orderStatus,List<BigInteger> orderIds);

    /**
     * 创建分销订单记录
     *
     * @param createReqDto 创建信息
     * @return 编号
     */
    void createOrderBatch(List<DistributeOrderDTO> createReqDto);

    /**
     * 统计附和条件的订单数和总佣金
     * @param pageReqVO
     * @return
     */
    AppDistributeOrderAmountVO selectSumAmount(AppDistributeOrderReqVO pageReqVO);
}
